#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <algorithm>
#include <cstring>
#include <assert.h>

class string
{
public:
	string(const char* str = "") //构造函数
	{
		if (nullptr == str)// 避免传递nullptr指针，认为程序非法
		{
			assert(0);
			return;
		}
		_str = new char[strlen(str) + 1];
		strcpy(_str, str);
	}
	string(const string& s)
		:_str(new char[strlen(s._str) + 1])
	{
		strcpy(_str, s._str);
	}
	string& operator=(const string& s)
	{
		if (this != &s)
		{
			delete[] _str;
			_str = new char[strlen(s._str) + 1];
			strcpy(_str, s._str);
		}
		return *this;
	}
	~string()
	{
		delete[] _str;
		_str = nullptr;
	}
private:
	char* _str;
};

//const char* c_str() const;
//string::string(const char* str) //构造
//	:_str(new char[strlen(str) + 1])
//{
//	strcpy(_str, str);
//}
//
//string::string(const string& s) //拷贝
//{
//	_str = new char[strlen(s._str) + 1];
//	strcpy(_str, s._str);
//}
//
//string& string::operator=(const string& s) //赋值
//{
//	
//	if (this != &s)
//	{
//		delete[] _str;
//		_str = new char[strlen(s._str) + 1];
//		strcpy(_str, s._str);
//	}
//	return *this;
//}
//
//string::~string()
//{
//	delete[] _str;
//	_str = nullptr;
//}
//
const char* string::c_str() const
{
	return _str;
}

int main()
{
	string s1("yyyy");
	std::cout << s1.c_str() << std::endl;

	s1 = "xxxx";
	std::cout << s1.c_str() << std::endl;
	
	string s2(s1);
	std::cout << s2.c_str() << std::endl;

}